Network configurations for large data center networks are often specified at a centralized controller. The controller can program switches, routers, servers, and elements in the network according to the specified network configurations. In other network environments, such as traditional networks, network behavior is largely driven by configurations programmed at individual network devices, and may not be centralized or centrally managed.
Network configurations are inherently complex, and involve low level as well as high level configurations of several layers of the network such as access policies, forwarding policies, routing policies, security policies, QoS policies, contracts, etc. Given such complexity, the network configuration process is error prone in both centralized and non-centralized scenarios. In many cases, the configurations defined or stored at one or more devices can contain errors and inconsistencies that are often extremely difficult to identify and may create significant problems in the network.